﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Unimaq.Macroprocesos.LogicaNegocio;

namespace MacroprocesosWinForms.Administrador.ControlUsuario
{
    public partial class Empresa : UserControl
    {
        private Unimaq.Macroprocesos.AccesoDatos.Empresa selectedEmpresa;

        public Empresa()
        {
            InitializeComponent();
        }

        public Empresa(Unimaq.Macroprocesos.AccesoDatos.Empresa selectedEmpresa) : this()
        {
            // TODO: Complete member initialization
            this.selectedEmpresa = selectedEmpresa;
            btnGuardar.Tag = "M";
        }

        private void Empresa_Load(object sender, EventArgs e)
        {
            if (btnGuardar.Tag != null)
            {
                if (btnGuardar.Tag.ToString().Equals("M"))
                {
                    RellenarFormulario();
                    btnEliminar.Enabled = true;
                }
            }
            else
            {
                btnEliminar.Enabled = false;
            }
        }

        private void LimpiarFormulario()
        {
            txtEmpresa.ResetText();
            txtDescripcion.ResetText();
            btnGuardar.Tag = null;
        }

        private void RellenarFormulario()
        {
            if (selectedEmpresa != null)
            {
                gbEmpresa.Tag = selectedEmpresa.Id;
                txtEmpresa.Text = selectedEmpresa.NombreEmpresa.Trim();
                txtDescripcion.Text = selectedEmpresa.Descripcion.Trim();
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            bool correcto = false;

            if (!string.IsNullOrWhiteSpace(txtEmpresa.Text))
            {
                EmpresaBLL empresaBLL = new EmpresaBLL();
                List<Unimaq.Macroprocesos.AccesoDatos.Empresa> lista = empresaBLL.Buscar(txtEmpresa.Text.Trim());

                if (lista.Count == 0)
                {
                    correcto = true;
                }
                else
                {
                    Unimaq.Macroprocesos.AccesoDatos.Empresa empresa = lista.First();

                    if (txtEmpresa.Text.Trim().Equals(empresa.NombreEmpresa.Trim()))
                    {
                        correcto = true;
                    }
                    else
                    {
                        MessageBox.Show("el nombre ingresado ya se encuentra registrado", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    }
                }
            }
            else
            {
                MessageBox.Show("Ingrese el nombre de la empresa", "Macroprocesos - Unimaq", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }

            if (correcto)
            {
                int resultado = 0;

                if (btnGuardar.Tag == null)
                {
                    Unimaq.Macroprocesos.AccesoDatos.Empresa nuevaEmpresa =
                        new Unimaq.Macroprocesos.AccesoDatos.Empresa()
                        {
                            NombreEmpresa = txtEmpresa.Text.Trim(),
                            Descripcion = txtDescripcion.Text.Trim()
                        };

                    EmpresaBLL empresaBLL = new EmpresaBLL();
                    resultado = empresaBLL.Registrar(nuevaEmpresa);
                }
                else if (btnGuardar.Tag.ToString().Equals("M"))
                {
                    //actualiza la información
                    Unimaq.Macroprocesos.AccesoDatos.Empresa updEmpresa =
                        new Unimaq.Macroprocesos.AccesoDatos.Empresa()
                        {
                            NombreEmpresa = txtEmpresa.Text.Trim(),
                            Descripcion = txtDescripcion.Text.Trim()
                        };

                    EmpresaBLL empresaBLL = new EmpresaBLL();
                    resultado = empresaBLL.Actualizar(
                        new Unimaq.Macroprocesos.AccesoDatos.Empresa() { Id = int.Parse(gbEmpresa.Tag.ToString()) },
                        updEmpresa);

                }

                if (resultado > 0)
                {
                    if (btnGuardar.Tag == null)
                    {
                        MessageBox.Show("Empresa registrada", "Macroprocesos - Unimaq", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);                        
                    }
                    else if (btnGuardar.Tag.ToString().Equals("M"))
                    {
                        MessageBox.Show("Empresa modificada", "Macroprocesos - Unimaq", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);                        
                    }

                    LimpiarFormulario();
                    ActualizarArbol();
                }
                else
                {
                    MessageBox.Show("Error al registrar la empresa", "Macroprocesos - Unimaq", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if(btnGuardar.Tag != null)
            {
                if(btnGuardar.Tag.ToString().Equals("M"))
                {
                    DialogResult dr = MessageBox.Show("¿Está seguro en eliminar la empresa?", "Macroprocesos - UNIMAQ", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);

                    if (dr == DialogResult.Yes)
                    {
                        //procede a eliminar
                        if (selectedEmpresa != null)
                        {
                            Unimaq.Macroprocesos.LogicaNegocio.ProcesoBLL procesoBLL = new ProcesoBLL();
                            List<Unimaq.Macroprocesos.AccesoDatos.Proceso> listProcesos = procesoBLL.Listar(selectedEmpresa);

                            int resultado = 0;

                            //eliminamos procesos y documentos
                            foreach (Unimaq.Macroprocesos.AccesoDatos.Proceso p in listProcesos)
                            {
                                procesoBLL.EliminarProceso(p, ref resultado, true);
                            }

                            EmpresaBLL empresaBLL = new EmpresaBLL();
                            resultado += empresaBLL.Eliminar(selectedEmpresa);

                            if (resultado > 0)
                            {
                                MessageBox.Show("Empresa eliminada", "Macroprocesos - UNIMAQ", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2);
                                LimpiarFormulario();
                                ActualizarArbol();
                                btnEliminar.Enabled = false;
                            }
                            else
                            {
                                MessageBox.Show("Error al eliminar la empresa.\nComunicarse con el Administrador.", "Macroprocesos - UNIMAQ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                                LimpiarFormulario();
                                btnEliminar.Enabled = false;
                            }
                        }
                    }
                }
            }
        }

        private void ActualizarArbol()
        {
            PrincipalAdministrador iuPrincipalAdministrador = this.ParentForm as PrincipalAdministrador;
            iuPrincipalAdministrador.CargarArbolProcesos();
        }
    }
}
